package org.dromara.comm.Utils;

import cn.dev33.satoken.stp.StpUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.comm.domain.AsUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Component
@Slf4j
public class TokenUtil {
//    /**
//     * token过期时间
//     */
//    private static final long EXPIRE_TIME = 30 * 60 * 10000;
////    private static final long EXPIRE_TIME = 1440;
//    /**
//     * token秘钥
//     */
//    private static final String SECRET = "demo_secret";
//
//
//    /**
//     * 生成签名，30分钟过期
//     * @param username 用户名
//     * @param  登录时间
//     * @return 生成的token
//     */
//    public static String sign(String username) {
//        try {
//            // 设置过期时间
//            Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME);
//            // 私钥和加密算法
//            Algorithm algorithm = Algorithm.HMAC256(SECRET);
//            // 设置头部信息
//            Map<String, Object> header = new HashMap<>(2);
//            header.put("Type", "Jwt");
//            header.put("alg", "HS256");
//            // 返回token字符串
//            return JWT.create()
//                    .withHeader(header)
//                    .withClaim("loginName", username)
////                    .withClaim("loginTime", loginTime)
//                    .withExpiresAt(date)
//                    .sign(algorithm);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//    }
//
//    /**
//     * 检验token是否正确
//     * @param token 需要校验的token
//     * @return 校验是否成功
//     */
//    public static boolean verify(String token){
//        try {
//            //设置签名的加密算法：HMAC256
//            Algorithm algorithm = Algorithm.HMAC256(SECRET);
//            JWTVerifier verifier = JWT.require(algorithm).build();
//            DecodedJWT jwt = verifier.verify(token);
//            return true;
//        } catch (Exception e){
//            return false;
//        }
//    }

//    @Autowired
//    private StringRedisTemplate redisTemplate;
//
//    private static final String TOKEN_PREFIX = "user:token:";
//
//    // 校验 Token 并返回用户信息
//    public AsUser validateToken(String token) {
//        // 检查是否登录
//        if (!StpUtil.isLogin()) {
//            throw new RuntimeException("用户未登录");
//        }
//
//        // 从 Redis 获取用户信息
//        String userInfoJson = redisTemplate.opsForValue().get(TOKEN_PREFIX + token);
//        log.info("从 Redis 获取到的用户信息: {}", userInfoJson);
//        if (userInfoJson == null) {
//            throw new RuntimeException("Token 无效或已过期");
//        }
//
//        // 将 JSON 字符串转换为 AsUser 对象
//        return convertJsonToUser(userInfoJson);
//    }
//
//    // 从 Token 中获取用户 ID
//    public String getUserIdFromToken(String token) {
//        AsUser user = validateToken(token);
//        return String.valueOf(user.getId());
//    }
//
//    // 从 Token 中获取用户名
//    public String getUsernameFromToken(String token) {
//        AsUser user = validateToken(token);
//        return user.getUsername();
//    }
//
//    // 将 JSON 字符串转换为 AsUser 对象
//    private AsUser convertJsonToUser(String userInfoJson) {
//        ObjectMapper objectMapper = new ObjectMapper();
//        try {
//            return objectMapper.readValue(userInfoJson, AsUser.class);
//        } catch (Exception e) {
//            throw new RuntimeException("Error converting JSON to user", e);
//        }
//    }
}
